package com.micai.boss.base.design.mode.template.method;

/**
 * 描述：抽象模板角色类
 * <p>
 *
 * @author: 赵新国
 * @date: 2018/4/28 17:59
 */
public abstract class Account {

    /**
     * 模板方法，计算利息数额
     * @return 返回利息数额
     */
    public final double calculateInterest() {
        double interestRate = doCalculateInterestRate();
        String accountType = doCalculateAccountType();
        double amount  = calculateAmount(accountType);
        return amount * interestRate;
    }

    /**
     * 基本方法留给子类实现
     */
    protected abstract String doCalculateAccountType();

    /**
     * 基本方法留给子类实现
     */
    protected abstract double doCalculateInterestRate();

    /**
     * 基本方法，已经实现
     */
    private double calculateAmount(String accountType){
        /**
         * 省略相关的业务逻辑
         */
        return 7243.00;
    }
}
